package com.mes.task.dao.iface;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.bstek.dorado.data.provider.Page;
import com.mes.common.dao.iface.IBasicDao;
import com.mes.task.domain.PartTask;

public interface IPartTaskDao extends IBasicDao<PartTask> {

	/**
	 * 通过partUid获取在制零件任务
	 * 
	 * @param partUid
	 * @return
	 */
	public List<PartTask> getWipPartTasksByPartUid(String partUid);

	/**
	 * 返回demand（计划、指令）的关联零件任务
	 * 
	 * @param demandUid
	 * @param page
	 * @return
	 */
	public List<PartTask> getPartTasksByDemandUid(String demandUid, Page<PartTask> page);

	/**
	 * 通过物料唯一号和批次号返回零件任务
	 * 
	 * @param partUid
	 * @param batchNum
	 * @return
	 */
	public PartTask getPartTaskByPartUidAndBatchNum(String partUid, String batchNum);

	/**
	 * 通过主制部门和物料唯一号获取在制零件任务(已投产并且未完成)
	 * 
	 * @param masterShopUid
	 * @param partUid
	 * @return
	 */
	public List<PartTask> getWipPartTasksByDeptAndPart(String masterShopUid, String partUid);

	/**
	 * 通过主制部门获取在制零件任务(已投产并且未完成)
	 * 
	 * @param masterShopUid
	 * @return
	 */
	public List<PartTask> getWipPartTasksByDept(String masterShopUid);

	/**
	 * 通过原来的批次号，得到新的分批后的零件任务
	 * 
	 * @param partNumber
	 * @param batchnum
	 * @return List<PartTask>
	 */
	public List<PartTask> getAllBatchedPartTasks(String partNumber, String batchnum);

	/**
	 * 获取未分解的零件任务
	 * 
	 * @param page
	 * @return
	 */
	public List<PartTask> getUnBreakPartTasks(Page<PartTask> page);

	/**
	 * 获取未分解的零件任务
	 * 
	 * @param partUid
	 * @param page
	 * @return
	 */
	public List<PartTask> getUnBreakPartTasksByPartUid(String partUid, Page<PartTask> page);

	/**
	 * 获取未分解的零件任务
	 * 
	 * @param drawingId
	 * @param page
	 * @return
	 */
	public List<PartTask> getUnBreakPartTasks(String drawingId, Page<PartTask> page);

	/**
	 * 获取某一部门的在制零件任务 from,size两个参数用于分页，如果有一项为空，则不进行分页
	 * 
	 * @param masterShopUid
	 * @param from
	 * @param size
	 * @return
	 */
	public List<PartTask> getWipPartTasks(String masterShopUid, Integer from, Integer size);

	/**
	 * 通过这三个属性获取唯一的零组件任务
	 * 
	 * @param part_Number
	 * @param batchNum
	 * @param masterShopUid
	 * @return
	 */
	public PartTask getPartTaskByPartUidAndBatchNum(String partUid, String batchNum, String masterShopUid);

	/**
	 * 查找某段时间厂外协作加工回来的零件任务
	 * 
	 * @param fromDate
	 * @param toDate
	 * @return
	 */
	public List<PartTask> getWaixiePartTasksByReturnTime(Date fromDate, Date toDate);

	
	/**********************************以下是MPM项目中增加的接口**********/
	/**
	 * 通过parentTaskUid获得零件任务
	 * 
	 * @param parentTaskUid
	 * @param page
	 * @return
	 */
	public List<PartTask> getPartTasksByParentUid(String parentTaskUid, Page<PartTask> page);

	/**
	 * 通过机架次获取AO装配任务
	 * 
	 * @param contignationNumber
	 * @return
	 */
	public List<PartTask> getAOTasksByContignationNumber(String contignationNumber);

	/**
	 * 通过工艺唯一号与机架次获取AO装配任务
	 * 
	 * @param routingUid
	 * @param contignationNumber
	 * @return
	 */
	public List<PartTask> getAOTasksByRoutingUid(String routingUid, String contignationNumber);

	/**
	 * 通过父任务唯一号获取子AO装配任务，page为null是返回list
	 * 
	 * @param parentTaskUid
	 * @param page
	 * @return
	 */
	public List<PartTask> getAOTasksByParentTaskUid(String parentTaskUid, Page<PartTask> page);

	public List<PartTask> getAOTasksByPartTaskId(String partTaskId, Page<PartTask> page);

	public PartTask getProductTaskByPartTaskId(String partTaskId);

	/**
	 * 条件查询PartTask,带分页
	 * @param page
	 * @param params
	 */
	public void getPartTaskByCondition(Page<PartTask> page, Map<String, Object> params) throws Exception;

	/**
	 * @author lcs
	 * 通过任务好、图号、批次、状态获得AO装配任务
	 * @param partTaskId
	 * @param drawingId
	 * @param batchNum
	 * @param taskState
	 * @param page
	 * @return
	 */
	List<PartTask> getAOTasksByPartTaskId(String partTaskId, String drawingId, String batchNum, Integer taskState,
			Page page);



}
